/*
 *
 * 名称：八字
 * 功能：包括八字、干支柱等逻辑
 * 作者：清河张
 * 时间：2025.05.12
 *
 */

#ifndef BAZI_H
#define BAZI_H
#include "gan10.h"
#include "zhi12.h"


struct GANZHI //干支，单柱数值
{
public:
    GAN10 _g;
    ZHI12 _z;
    //默认构造函数
    GANZHI();
    //全参数构造函数，默认属性配置
    GANZHI(GAN10, ZHI12);
    GANZHI chong() const;//求相冲
    GAN10 wujia() const;//无甲，遇甲则遁
    GAN10 dun() const;//求遁
    int xun() const;//旬
    int wei() const;//旬中位数
    ZHI12 shouzhi() const;//首支
    GANZHI xunshou() const;//旬首
    const char* name() const;//干支字

    int gz60() const;//60甲子排序，从0开始
    static GANZHI gz60(int);//60甲子序号得干支
    static GANZHI chujia(const GAN10&);//出甲
    ZHI12X2 kw() const;//空亡
    WUXINGX2 wx5() const;//五行
    WUXINGX2 he() const;//相合

    ZHI12 kw1() const;//空亡一
    ZHI12 kw2() const;//空亡二
private:
    mutable char _buf[12];
};

class BAZI
{
public:
    //默认初始化
    BAZI();
    //全参数初始化
    BAZI(const GANZHI& n, const GANZHI& y, const GANZHI& r, const GANZHI& s);
    //八字全名
    const char* name() const;
    //四柱干支
    GANZHI _n,_y,_r,_s;
    //快速生成八字
    static const BAZI nl(int year360, int month360, int day360, int hour360);//农历四柱干支序 时钟
private:
    mutable char _name[32];

}; //八字


#endif // BAZI_H
